文章学习自:P4语言编程详解由于原文有一点的年份,所以也继续阅读了相关的最新规范。P4语言规范
基础数据类型布尔型(bool)运算符描述and双目运算符,结果为布尔型or双目运算符,结果为布尔型not单目运算符,结果为布尔型==,!=相等或不等,结果为布尔型无符号整型(bit)又称之为位串(bit-string),对位串进行数学运算的时候,位串长度必须是8的整数倍。
运算符描述==,!=是否相等或不等,运算结果为布尔型。,=无符号数比较,操作数的长度(W)要求相同,运算结果为布尔型。&,|,^按位运算符(分别是与,或和异或),操作数的长度(W)要求相同,运算结果为无符号整型。~运算结果为操作数的补码。左移运算符操作数为无符号整型,右移运算符操作数必须是无符号数或非负整数。此运算符为逻辑位移。+(单目)单目加运算,效果同no-op。(无意义)-(单目)单目减运算,计算结果为2W减去操作数,W为操作数长度。+(双目)二目加运算,操作数的长度(W)要求相同。计算结果为操作数的算术和,且运算结果长度也必须为W,超过则截断。-(双目)二目减运算,操作数的长度(W)要求相同。计算结果为操作数的算术差。*无符号乘法运算,操作数的长度(W)要求相同,计算结果为无符号数且长度与操作数相等。有符号整数型(int(W))大致与无符号整数相同
运算符描述-(单目)单目减运算,运算结果伟有符号整型,长度和操作数相等+(双目)二目加运算,操作数数据类型必须相同,运算结果也为同类型。-(双目)二目减运算,操作数数据类型必须相同,运算结果也为同类型。*有符号乘法运算,操作数的长度(W)要求相同,计算结果为有符号数且长度与操作数相等。变长位串(varbit)该数据类型,不支持算术、比较和位运算,也不支持类型转换,该数据类型在定义时会指定一个静态的最大宽度值,解析器会提取变长位串数据并设置一个值作为长度。
无限精度整型(int)运算符描述==,!=是否相等或不等,运算结果为布尔型。,=有符号数比较,运算结果为布尔型。右移运算符操作数必须为正整数;左移运算结果和操作数相同。ab等价于a/2b。+(单目)单目加运算,效果同no-op。(无意义)-(单目)单目减运算,运算结果为整型,且该运算不会导致溢出。+(双目)二目加运算,操作数类型都必须是整型,运算结果为整型,且该运算不会导致溢出。-(双目)二目减运算,操作数类型都必须是整型,计算结果为整型,且该运算不会导致溢出。*无符号乘法运算,操作数必须都是整形,计算结果为整形,该运算不会导致溢出。/,%二目有符号除法和取模运算,操作数必须是正整数,运算结果为正整数。数据类型转换可以看出,上述的很多运算都是建立在相同数据类型的前提下,但是对于某些数据类型是不能相互转换的,p4也提供了合法的数据类型转换。
fromto描述bitbool0代表false,1代表true(中括号里的1代表的是字节数,不是0和1,下同)boolbit同上bitint保留所有比特位不变intbit同上bitbit当w>w1时,保留低位w1位长度的数据,小于时新增位补0intint当W>W1时,保留低位W1长度的数字,当W